package com.sservice.service.service;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created by byte2 on 2017-03-08.
 */
public class Check {
    /**
     * 判断类 是否实现接口
     *
     * @param clazz 类
     * @param intf  包含包名称的接口名称
     * @return 结果<br>
     * true: 是<br>
     * false: 否
     */
    public static boolean InterfaceOf(Class<?> clazz, String intf) {
        if (clazz.isInterface()) {
            return clazz.getName().equals(intf);
        }

        Class<?>[] faces = clazz.getInterfaces();
        for (Class<?> face : faces) {
            if (face.getName().equals(intf)) {
                return true;
            }
        }

        return false;
    }

    /**
     * 判断对象是否为数字
     *
     * @param object 对象实例
     * @return 判断结果<br>
     * true: 数字<br>
     * false: 不是数字<br>
     */
    public static boolean isPrimitive(Object object) {
        if (object == null) {
            return false;
        }

        return (object instanceof Integer) || (object instanceof Long)
                || (object instanceof Short) || (object instanceof Byte)
                || (object instanceof Float) || (object instanceof Double);
    }

    /**
     * 判断字符串是否为NULL或空值 (一个或多个空格的字符串也当做空值)
     *
     * @param str 字符串
     * @return 结果<br>
     * true: 字符串为NULL或空值<br>
     * false: 字符串不为NULL或空值
     */
    public static boolean nullOrEmpty(String str) {
        return str == null || (!str.equals("\t") && str.trim().isEmpty());
    }

    /**
     * 判断列表是否为NULL或不包含元素
     *
     * @param list 列表
     * @return 结果<br>
     * true: 列表为NULL或不包含元素<br>
     * false: 列表内存放了元素
     */
    public static <T> boolean nullOrEmpty(List<T> list) {
        return list == null || list.isEmpty();
    }

    /**
     * 判断MAP是否为NULL或不包含元素
     *
     * @param map MAP
     * @return 结果<br>
     * true: MAP为NULL或不包含元素<br>
     * false: MAP内存放了元素
     */
    public static <K, V> boolean nullOrEmpty(Map<K, V> map) {
        return map == null || map.isEmpty();
    }

    /**
     * 判断集合是否为NULL或不包含元素
     *
     * @param set 集合
     * @return 结果<br>
     * true: 集合为NULL或不包含元素<br>
     * false: 集合内存放了元素
     */
    public static <T> boolean nullOrEmpty(Set<T> set) {
        return set == null || set.isEmpty();
    }

    /**
     * 判断数组是否为NULL或不包含元素
     *
     * @param array 数组
     * @return 结果<br>
     * true: 数组为NULL或不包含元素<br>
     * false: 数组内存放了元素
     */
    public static <T> boolean nullOrEmpty(T[] array) {
        return array == null || array.length == 0;
    }

    /**
     * 判断集合类型是否为NULL或不包含元素
     *
     * @param collect 集合类型
     * @return 判断结果<br>
     * true: 集合类型为NULL或不包含元素<br>
     * false: 集合类型内存放了元素
     */
    public static <T> boolean nullOrEmpty(Collection<T> collection) {
        return collection == null || collection.size() == 0;
    }

    /**
     * 判断整形数字数组是否为NULL或不包含元素
     *
     * @param array 数组
     * @return 结果<br>
     * true: 数组为NULL或不包含元素<br>
     * false: 数组内存放了元素
     */
    public static boolean nullOrEmpty(int[] array) {
        return array == null || array.length == 0;
    }

    /**
     * 判断长整形数字数组是否为NULL或不包含元素
     *
     * @param array 数组
     * @return 结果<br>
     * true: 数组为NULL或不包含元素<br>
     * false: 数组内存放了元素
     */
    public static boolean nullOrEmpty(long[] array) {
        return array == null || array.length == 0;
    }

    /**
     * 判断字符数组是否为NULL或不包含元素
     *
     * @param array 数组
     * @return 结果<br>
     * true: 数组为NULL或不包含元素<br>
     * false: 数组内存放了元素
     */
    public static boolean nullOrEmpty(char[] array) {
        return array == null || array.length == 0;
    }

    /**
     * 判断字节数组是否为NULL或不包含元素
     *
     * @param array 数组
     * @return 结果<br>
     * true: 数组为NULL或不包含元素<br>
     * false: 数组内存放了元素
     */
    public static boolean nullOrEmpty(byte[] array) {
        return array == null || array.length == 0;
    }

    /**
     * 判断浮点数数组是否为NULL或不包含元素
     *
     * @param array 数组
     * @return 结果<br>
     * true: 数组为NULL或不包含元素<br>
     * false: 数组内存放了元素
     */
    public static boolean nullOrEmpty(float[] array) {
        return array == null || array.length == 0;
    }
}
